package hr.interceptors;

import hr.utils.CommonUtils;
import hr.utils.TokenUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class TokenInterceptor implements HandlerInterceptor {

    @Autowired
    private TokenUtils tokenUtils;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {

        // 跨域请求会发送预检请求检查服务器是否允许跨域 直接放行
        if ("options".equalsIgnoreCase(request.getMethod())) {
            return true;
        }

        String token = CommonUtils.getTokenFromReqHeaders(request);

        // 权限拦截
        if (TokenUtils.extractNameFromToken(token) != null && TokenUtils.extractNameFromToken(token).equals("yk")) {
            // 游客权限控制
            String path = request.getRequestURI();
            if (!(path.contains("obtainJobPositionsByDepartmentId")
                    || path.contains("getAllDepartments")
                    || path.contains("system"))) {
                throw new Exception("您的账号没有访问该请求的权限！");
            }
        }

        // 如果token为空或不合法，可以根据业务需求进行相应处理，比如返回未授权错误
        if (!tokenUtils.checkToken(token)) {
            // 设置 HTTP 响应的状态码为 401，表示未经授权。在 Web 应用程序中，HTTP 状态码用于指示服务器对请求的处理情况。
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return false;
        }

        return true;
    }
}
